** Clearing Stata memory
capture log close
clear all
set more off, perm
set seed 1234

*******************************************************
**************** Cleaning RAIS data  ******************
*******************************************************

*************************************
*									*
* RAIS data: UNICAMP Gender sample	*
* 		    						*
*************************************

* Importing RAIS data

use "Work Data/rais.dta",clear

count 
duplicates report inscri2

foreach var of varlist _all {
capture replace `var'=. if `var'==-1
}

*dropping variables we do not need * 
drop ano_nasc_r mun_estbl deslig_motivo admissao_tipo salario_tipo sexo_r pais_nacionalidade_r ///
raca_r ind_def ind_cei_vinc estbl_tipo ind_estbl_pat rem_media_sm rem_dez_sm cei_vinc cnpj_raiz idade ///
deslig_dia ibge_subsetor estbl_cep mun_trab razao_social trab_interm trab_parcial ind_sindical sal_contr ///
vinculo_ativo vinculo_tipo cbo94 estbl_tamanho estbl_simples vinculo_tempo cnpj cbo02 rem_jan-rem_nov

gen dtadmissao2=string(dta_admissao,"%08.0f")
gen dt_adm=date(dtadmissao2, "DMY")
format dt_adm %td
gen admission_year_month=mofd(dt_adm)
format admission_year_month %tm
drop dtadmissao2

** Based on the start and end contract dates, determine whether each contract was active or inactive in a given month:
* We consider the admission and dismissal months as active
tab ano_base
replace deslig_mes=. if deslig_mes==0
forvalues x=1/12{
gen  ctm`x'i=.
levelsof ano_base, local(levels) 
foreach i of local levels {
replace ctm`x'i=( admission_year_month<=tm(`i'm`x') & deslig_mes>=`x') if ano_base==`i'
}
}

* We record total number of months (used to drop contracts with zero months below):
describe ctm*
egen ctyi=rowtotal(ctm*)
sum ctyi
tab ctyi

* Record the number of contracts an individual holds each month:
forvalues x=1/12{
bys inscri2 ano_base: egen ctm`x'=total(ctm`x'i)
sum ctm`x'
tab ctm`x'
}

* Then record the data on average salary and the number of hrs per week, as per labor contract for those who are working:
rename rem_media mwagei
rename horas_contr choursi
sum mwagei choursi

* We keep only the relevant variables
keep inscri2 inscription year ano_base ct* mwagei choursi rem_dez *cnae* nat_juridica  escolaridade afast*_causa 
order inscri2 inscription year ano_base ct* mwagei choursi rem_dez *cnae* nat_juridica escolaridade afast*_causa

* We drop those entries that correspond to zero full months worked:
drop if ctyi==0

* For individuals with multiple entries, we calculate average salary and average hours in the months spent on each job.

* We start by recording average salary and hours per month per contract:
forvalues x=1/12{
foreach y in mwage chours {
gen `y'm`x'i =ctm`x'i*`y'i
}
}

* Generate number of hours per month, per contract 
forvalues x=1/12{
replace choursm`x'i =choursm`x'i*52/12
}

* Record total income (calculated using mean salary) and hours 
** The information on mean wage will be used to identify individual's main labor contract.
foreach y in mwage chours {
describe `y'm*i
egen `y'toti = rowtotal(`y'm*i)
sum  `y'toti
}

* Detect for each individual its main occupation, defined as the one providing her with the largest share of income during a certain period (based on mwage, it can be changed to cwage).
* if two jobs with the same earning, both of them will have a main job tag
bys inscri2 ano_base: egen max_wage=max(mwagetoti)
gen main_job = (mwagetoti == max_wage)
drop max_wage

* Identify workers at the financial system
gen group_CNAE_95=substr(string(cnae95),1,2)
destring group_CNAE_95, replace force
gen group_CNAE_20=substr(string(cnae_20_subclasse),1,2)
replace group_CNAE_20=substr(string(cnae_20_classe),1,2) if cnae_20_subclasse==.
destring group_CNAE_20, replace force
tab1 group_CNAE*
gen financei=0 if (group_CNAE_95~=. | group_CNAE_20~=.)
/*  CNAE 2.0
K	ATIVIDADES FINANCEIRAS, DE SEGUROS E SERVIÇOS RELACIONADOS
	64 ATIVIDADES DE SERVIÇOS FINANCEIROS
 	65 SEGUROS, RESSEGUROS, PREVIDÊNCIA COMPLEMENTAR E PLANOS DE SAÚDE
 	66 ATIVIDADES AUXILIARES DOS SERVIÇOS FINANCEIROS, SEGUROS, PREVIDÊNCIA COMPLEMENTAR E PLANOS DE SAÚDE
*/
replace financei=1 if  group_CNAE_20==64 | group_CNAE_20==65 | group_CNAE_20==66
/* CNAE 1.0
INTERMEDIAÇAO FINANCEIRA, SEGUROS, PREVIDENCIA COMPLEMENTAR E SERVIÇOS RELACIONADOS
	65 INTERMEDIAÇAO FINANCEIRA
 	66 SEGUROS E PREVIDENCIA COMPLEMENTAR
 	67 ATIVIDADES AUXILIARES DA INTERMEDIAÇAO FINANCEIRA, SEGUROS E PREVIDENCIA COMPLEMENTAR
*/
replace financei=1 if  group_CNAE_95==65 | group_CNAE_95==66 | group_CNAE_95==67
sum financei
mdesc financei
gen main_financei=financei if main_job==1 
* Worked at the finance system 
bys inscri2 ano_base: egen finance=max(financei)
bys inscri2 ano_base: egen main_finance=max(main_financei)
sum finance main_finance
mdesc finance main_finance
drop group_CNAE* financei main_financei *cnae*

* Identify workers at the public and private sector
tab nat_juridica

* Public employees
/* 
1. Administração Pública
101-5 – Órgão Público do Poder Executivo Federal
102-3 – Órgão Público do Poder Executivo Estadual ou do Distrito Federal
103-1 – Órgão Público do Poder Executivo Municipal
104-0 – Órgão Público do Poder Legislativo Federal
105-8 – Órgão Público do Poder Legislativo Estadual ou do Distrito Federal
106-6 – Órgão Público do Poder Legislativo Municipal
107-4 – Órgão Público do Poder Judiciário Federal
108-2 – Órgão Público do Poder Judiciário Estadual
110-4 – Autarquia Federal
111-2 – Autarquia Estadual ou do Distrito Federal
112-0 – Autarquia Municipal
113-9 – Fundação Pública de Direito Público Federal
114-7 – Fundação Pública de Direito Público Estadual ou do Distrito Federal
115-5 – Fundação Pública de Direito Público Municipal
116-3 – Órgão Público Autônomo Federal
117-1 – Órgão Público Autônomo Estadual ou do Distrito Federal
118-0 – Órgão Público Autônomo Municipal
119-8 – Comissão Polinacional
120-1 – Fundo Público
121-0 – Consórcio Público de Direito Público (Associação Pública)
122-8 – Consórcio Público de Direito Privado
123-6 – Estado ou Distrito Federal
124-4 – Município
125-2 – Fundação Pública de Direito Privado Federal
126-0 – Fundação Pública de Direito Privado Estadual ou do Distrito Federal
127-9 – Fundação Pública de Direito Privado Municipal
*/
gen publici = cond(real(substr(string(nat_juridica),1,1)) == 1,1,0)
tab nat_juridica if publici==1
tab publici

replace publici=1 if nat_juridica==2011
replace publici=. if nat_juridica==2038
/*
2. Entidades Empresariais
201-1 – Empresa Pública
203-8 – Sociedade de Economia Mista
*/

replace publici=. if inlist(nat_juridica,3034,3131,3220,3239,3255,3263,3271,3280,3298)
/*
3. Entidades sem Fins Lucrativos
303-4 – Serviço Notarial e Registral (Cartório)
313-1 – Entidade Sindical
322-0 – Organização Religiosa
323-9 – Comunidade Indígena
325-5 – Órgão de Direção Nacional de Partido Político
326-3 – Órgão de Direção Regional de Partido Político
327-1 – Órgão de Direção Local de Partido Político
328-0 – Comitê Financeiro de Partido Político
329-8 – Frente Plebiscitária ou Referendária
*/

replace publici=. if inlist(nat_juridica,4090)
/*
4. Pessoas Físicas
409-0 – Candidato a Cargo Político Eletivo
*/
replace publici=. if inlist(nat_juridica,5029)
/*
5. Instituições Extraterritoriais
502-9 – Representação Diplomática Estrangeira
*/
mdesc publici
tab publici
gen main_publici=1 if main_job==1 & publici==1
replace main_publici=0 if main_job==1 & publici==0
gen main_privatei=1 if main_job==1 & publici==0
replace main_privatei=0 if main_job==1 & publici==1

tab1 main_publici main_privatei
* Main job public or private sector
bys inscri2 ano_base: egen main_public=max(main_publici)
bys inscri2 ano_base: egen main_private=max(main_privatei)
sum main_public main_private
mdesc main_public main_private
drop publici main_publici main_privatei nat_juridica

* Higher education degree
/*
9 - Educação Superior Completa
10 - Mestrado Completo
11 - Doutorado Completo
*/
tab escolaridade
gen HE = (escolaridade >=9) if !missing(escolaridade)
mdesc HE
bys inscri2 ano_base: egen higher_education=max(HE)
bys inscri2: egen higher_education_degree=max(HE)
mdesc higher_education
drop escolaridade HE

*** Maternity leave
d afast*_causa
/*
afast1_causa	Causa Afastamento 1; CAUS AFAST 1	causa do primeiro afastamento do empregado/servidor no ano-base	int	2007-2018, exceto 2011	
"10 - Acidente do trabalho típico (que ocorre no exercício de atividades profissionais à serviço da empresa)
20 - Acidente do trabalho de trajeto (ocorrido no trajeto residência-trabalho-residência)
30 - Doença relacionada ao trabalho
40 - Doença não relacionada ao trabalho
50 - Licença-maternidade - Atualizada na RAIS/2006
60 - Serviço militar obrigatório
70 - Licença sem vencimento/remuneração"		
Valores iguais a 99 foram transformados em missing.	
"Em 2011 existe a coluna, mas todos os valores são missing.
Verificado que as categorias coincidem de um ano a outro."																	
*/		
gen maternity=0
foreach v of varlist afast*_causa {
destring `v', replace
replace maternity=1 if `v'==50
}
sum maternity
bys inscri2 ano_base: egen maternity_leave=max(maternity)
bys inscri2: egen maternity_leave_any=max(maternity)
mdesc maternity_leave_any maternity_leave
sum  maternity_leave_any maternity_leave
drop maternity

* Compute total income based on mean salary:
foreach y in mwage {
bys inscri2 ano_base: egen `y'tot=total(`y'toti)
}

* Compute total income based on decmeber salary:
bys inscri2 ano_base: egen decwagetot=total(rem_dez)
sum decwagetot

* Hourly wage of the main occupation:
gen hmwagetoti=mwagetoti/chourstoti if main_job==1

* Finally, record hourly/monthly wage for main contract in all observations:
bys inscri2 ano_base: egen hmwagemain=mean(hmwagetoti)

* Drop the variables we do not need anymore
drop ct*i mw*i ch*i h*i rem_dez

* Identify whether an individual works at all each month, independently of the number of contracts:
forvalues x=1/12{
gen wkm`x'=(ctm`x'>0 & ctm`x'<.)
sum  wkm`x'
}
describe wkm*
egen wktot = rowtotal(wkm*)
sum wktot

* Generate labor market participation variables considering that the individual worked at least one, six and twelve months:
foreach x in 1 6 12 {
gen lfp`x'=(wktot>=`x')
}
sum lfp*

* We can then delete the variables indicating the workers' leaves main occupation, number of contracts and whether the individual worked in a given month and year:
drop wk* ctm* main_job afast*_causa

* Finally, eliminate duplicates that are identical. This should result in a database with one observation per individual (we also check it).
duplicates drop *, force
duplicates list inscri2 ano_base

count

* We account for inflation using the consumer price index:
joinby ano_base using "Work data/IPCA.dta", unmatched(master)

tab _merge
drop _merge

count

gen indice02=IPCA if ano_base==2002
egen indice_2002=max(indice02)

foreach x in mwagetot hmwagemain decwagetot {
replace `x'=`x'*(indice_2002/IPCA)
}

drop IPCA indice_2002 indice02

reshape wide mwagetot hmwagemain finance main_finance main_public main_private lfp* decwagetot higher_education maternity_leave, i(inscri2) j(ano_base)

duplicates list inscri2

count

foreach var of varlist mwagetot* hmwagemain* decwagetot* {
capture replace `var'=. if `var'==0
}

* Save final dataset:

save "Work data/RAIS_cleaned.dta", replace

log close
